package com.orkasgb.framework.orkasgbframework.java.lambda.firstexperience;

/**
 * 一个工厂类，用来生成实体对象。
 */
@FunctionalInterface
public interface DemoFactory {

	Object getDemo();
}

/**
 * 具体的实现类
 */
class DemoFactoryImpl implements DemoFactory{

	@Override
	public Object getDemo() {
		return new Demo();
	}

	/**
	 * Lambda表达式作为参数
	 *
	 * @param factory 接口参数
	 * @return 实体
	 */
	public static Object getDemo(DemoFactory factory) {
		return factory.getDemo();
	}

	/**
	 * Lambda表达式作为返回值
	 *
	 * @return 实体
	 */
	public static DemoFactory getDemo1() {
		return () -> new Demo();
	}
}

/**
 * 实体类
 */
class Demo {

	private String call = "Hello Word!";

	public Demo() {
		System.out.println(this.call);
	}
}

/**
 * 调用类
 */
class Main {

	public static void main(String[] args) {
		DemoFactory demo = () -> new Demo(); // 使用Lambda创建具体的实体对象
		System.out.println(demo.getDemo());

		DemoFactoryImpl.getDemo(() -> new Demo()); // Lambda作为参数进行传递

		DemoFactory factory = DemoFactoryImpl.getDemo1(); // Lambda作为返回值
		factory.getDemo();
	}
}


